package livre;

import junit.framework.TestCase;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

/**
 * The test class TestBibliotheque.
 *
 * @author  (your name)
 * @version (a version number or a date)
 */
public class TestBibliotheque extends TestCase
{
    private Library bibliotheque;
    private Livre livre1;
    private Livre livre2;
    private Livre livre3;
    private Livre livre4;
    
    /**
     * Default constructor for test class TestLivre
     */
    public TestBibliotheque()
    {
    }

    /**
     * Sets up the test fixture.
     *
     * Called before every test case method.
     */
    @Before
    public void setUp()
    {
        bibliotheque = new Library();
        
        livre1 = new Livre();
        livre1.renseigner("LEVY", 2009, "Où es-tu ?");
        
        livre2 = new Livre();
        
        livre3 = new Livre();
        livre3.renseigner("HIGGINS CLARK", 2004, "Un cri dans la nuit");
        
        livre4 = new Livre();
        livre4.renseigner("HUGO", 1862, "Les misérables");
    }


    /**
     * Tears down the test fixture.
     *
     * Called after every test case method.
     */
    @After
    public void tearDown()
    {
    }
    
    /**
     * Stocker un livre : TST07
     */
    @Test
    public void testStockerLivreTST07()
    {
        // TST07
        bibliotheque.stockerLivre(livre1);
        assertTrue(bibliotheque.getLivresDisponibles().containsKey(livre1));
        bibliotheque.stockerLivre(livre2);
        assertEquals("auteur non spécifié", livre2.getAuteur(), null);
        assertFalse(bibliotheque.getLivresDisponibles().containsKey(livre2));
    }
    
    /**
     * Stocker un livre : TST08
     */
    @Test
    public void testStockerLivreTST08()
    {
        // TST08
        bibliotheque.stockerLivre(livre1);
        assertTrue(bibliotheque.estReference(livre1.getAuteur()));
    }
    
    /**
     * Rechercher un livre : TST01
     */
    @Test
    public void testRechercherLivreTST01()
    {
        bibliotheque.stockerLivre(livre1);
        
        // TST01
        Livre introuvable = bibliotheque.rechercherLivre("");
        assertNull("livre introuvable", introuvable);
        
        String titre = "Où es-tu ?";
        Livre trouve = bibliotheque.rechercherLivre(titre);
        assertNotNull("livre trouvé", trouve);
    }
    
    /**
     * Rechercher un livre : TST02
     */
    @Test
    public void testRechercherLivreTST02()
    {
        bibliotheque.stockerLivre(livre1);
        
        // TST02
        String titre = "Où es-tu ?";
        Livre trouve = bibliotheque.rechercherLivre(titre);
        String titreTrouve = trouve.getTitre();
        assertEquals("titres égaux", titreTrouve, titre);
    }
    
    /**
     * Emprunter un livre : TST03
     */
    @Test
    public void testEmprunterLivreTST03()
    {
    	// TST03
    	bibliotheque.stockerLivre(livre3);
    	bibliotheque.emprunterLivre(livre3, "DUPONT");
    	assertTrue(bibliotheque.getEmprunts().containsKey(livre3));
    	assertFalse(bibliotheque.getLivresDisponibles().containsKey(livre3));
    }
    
    /**
     * Emprunter un livre : TST04
     */
    @Test
    public void testEmprunterLivreTST04()
    {
    	// TST04
    	bibliotheque.stockerLivre(livre3);
    	assertTrue(bibliotheque.getLivresDisponibles().containsKey(livre3));
    	
    }
    
    /**
     * Rendre un livre : TST05
     */
    @Test
    public void testRendreLivreTST05()
    {
    	bibliotheque.stockerLivre(livre4);
    	bibliotheque.emprunterLivre(livre4, "TARTANPION");
    	
    	// TST05
    	assertTrue(bibliotheque.getEmprunts().containsKey(livre4));
    
    }
    
    /**
     * Rendre un livre : TST06
     */
    @Test
    public void testRendreLivreTST06()
    {
    	bibliotheque.stockerLivre(livre4);
    	bibliotheque.emprunterLivre(livre4, "TARTANPION");
    	
    	// TST06
    	String rendeur = "TARTANPION";
    	String emprunteur = bibliotheque.getEmprunts().get(livre4)[0];
    	assertEquals(emprunteur, rendeur);
    
    }
    
    /**
     * Conseiller un livre : TST09
     */
    @Test
    public void testConseillerLivreTST09()
    {
    	bibliotheque.stockerLivre(livre4);
    	
    	// TST09
    	bibliotheque.conseillerLivre(livre4);
    	assertTrue(bibliotheque.getLivresConseilles().contains(livre4));
    }
    
    /**
     * Conseiller un livre : TST10
     */
    @Test
    public void testConseillerLivreTST10()
    {
    	bibliotheque.stockerLivre(livre4);
    	
    	// TST10
    	bibliotheque.conseillerLivre(livre4);
    	int annee = livre4.getAnnee();
    	assertTrue(annee<2000);
    	assertFalse(annee<0);
    }
    
    /**
     * Conseiller un livre : TST Issue
     */
    @Test
    public void testRendreLivreTSTIssue()
    {
    	bibliotheque.stockerLivre(livre4);
    	bibliotheque.emprunterLivre(livre4, "TARTANPION");
      bibliotheque.rendreLivre(livre4, "TARTANPION");
      assertTrue(bibliotheque.getLivresDisponibles().containsKey(livre4));
    }
   
    
    /**
     * 
     * @return
     */
    public Library getBibliotheque() {
        return bibliotheque;
    }

    /**
     * 
     * @param bibliotheque
     */
    public void setBibliotheque(Library bibliotheque) {
        this.bibliotheque = bibliotheque;
    }

}
